C# en Web Reference vs. Service Reference

Er zijn nog steeds verschillende mensen die verward raken door het verschil van deze 2 manieren om een webservice te gebruiken in een visual studio C# applicatie.

Add Web Reference: de ‘oude’ manier van werken, gebruik makende van de XmlSerializer. De gegenereerde code is in vele projecten bruikbaar (Web App, Web Site, Console toepassing, winforms toepassing…)

Add Service Reference: de nieuwere manier van werken die een WCF service reference toevoegd. Dit is ‘moderner’ en geeft je meer mogelijkheden om in te grijpen in de communciatielaag.

Het gebruik van de code is op de ‘oude’ manier iets eenvoudiger. Echter is dat een afweging tegen de nieuwe mogelijkheden.

Voorbeeld nieuwe code (servicereference):

binding.Name = "mve1";
binding.Security.Mode = BasicHttpsSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

Uri baseAddress = new Uri("https://xxxxxxxxx.aca.nl:1111/Instance/WS/Webshop%20XPRT/Codeunit/ICSGeneral");
EndpointAddress addr = new EndpointAddress(baseAddress);

var client = new ICSGeneral.CSGeneral_PortClient(binding, addr);
           System.ServiceModel.Security.UserNamePasswordClientCredential cre = client.ClientCredentials.UserName;
cre.UserName = @"uuuuuuuuuuu";
cre.Password = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";

string result = client.GetItemVariantInfoByCrossRef("2013111427275", "90-CM", true, true);
MessageBox.Show(result);

Voorbeeld oude code (webreference)

TestDmaCall.ICSGeneral ws = new TestDmaCall.ICSGeneral();
ws.Credentials = new System.Net.NetworkCredential("userid", "passwordtoken");
ws.Url =  https://xxxxxxxxx.aca.nl:1111/Instance/WS/Webshop%20XPRT/Codeunit/ICSGeneral";        
string result = ws.GetItemVariantInfoByCrossRef("2013111427275", "90-CM", true, true);
MessageBox.Show(result);